function p2(num, n = 2) {
  return (Array(n).join('0') + num).slice(-n);
}

function parseDate(ts) {
  const d = new Date(ts * 1000);
  return {
    y: d.getFullYear(),     /* 年 */
    m: d.getMonth() + 1,    /* 月 */
    d: d.getDate(),         /* 日 */
    h: d.getHours(),        /* 时 */
    M: d.getMinutes(),      /* 分 */
    s: d.getSeconds(),      /* 秒 */
    w: d.getDay()           /* 周几 */
  }
}

/**
 * 格式化时间
 * @param t
 * @param str
 * @returns {*}
 */
export function formatDate(t, str) {
  const d = parseDate(t);
  var obj = {
    yyyy: d.y,
    yy: ("" + d.y).slice(-2),
    m: d.m + 1,
    mm: ("0" + (d.m + 1)).slice(-2),
    d: d.d,
    dd: ("0" + d.d).slice(-2),
    H: d.h,
    HH: ("0" + d.h).slice(-2),
    h: d.h % 12,
    hh: ("0" + d.h % 12).slice(-2),
    M: d.M(),
    MM: ("0" + d.M).slice(-2),
    s: d.s,
    ss: ("0" + d.s).slice(-2),
    w: ['日', '一', '二', '三', '四', '五', '六'][t.getDay()]
  };
  return str.replace(/([a-z]+)/ig, function ($1) {
    return obj[$1]
  });
}


/**
 * 判断是否同一天
 * @param {number|string} t0 时间戳（秒）
 * @param {number|string} t1 时间戳（秒）
 */
function isSameDay(t0, t1) {
  if (isNaN(t0) || isNaN(t1)) return false;

  if (t0 == t1) return true;

  const d0 = parseDate(t0);
  const d1 = parseDate(t1);

  return d0.y === d1.y
    && d0.m === d1.m
    && d0.d === d1.d;
}

/**
 * 是否是闰年
 * @param year
 * @returns {boolean}
 */
function isLeap(year) {
  return year%4 === 0 && (year%100 !== 0 || year%400 === 0);
}

/**
 * 计算N天前后的时间戳，返回的时间戳以秒为单位
 * @param {number} startTime 起始时间戳，以秒为单位
 * @param {number} delta 天数差异
 */
export function diffDays(startTime=0, delta=0) {
  return startTime + delta * (24 * 3600);
}

/**
 * 计算起止时刻之间包含的天数
 * @param {number} startTime 开始时刻，以秒为单位
 * @param {number} endTime 结束时刻，以秒为单位
 */
export function calculateDaysBetween(startTime=0, endTime=0) {
  return (endTime - startTime) / (24 * 3600);
}

/**
 * 计算某天的开始时刻
 * @param {number} dayTime 时间戳，以秒为单位
 */
export function startOfDay(dayTime) {
  if (!dayTime) return 0;

  const date = new Date(dayTime * 1000);
  const startOfDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
  return startOfDate.getTime() / 1000;
}

/**
 * 播放器时间 00:00:00.000
 * @param $sec
 * @returns {string}
 */
export function formatMusicTime($sec){
  let h = Math.floor($sec / 3600)
  $sec = $sec % 3600;
  let m = Math.floor($sec / 60)
  $sec = $sec % 60;
  let s = Math.floor($sec)
  let ms = Math.floor($sec % 1*1000)
  return (h ? p2(h) + ':' : '')
    + p2(m) +
    ':' + p2(s)
    + (ms ? '.'+ p2(ms, 3) : '')
}
